 
'REALbasic 2006r4

 
  pbTHREAD1RUN_SET = true
  
  DIM f as folderitem
  DIM stream as binarystream
  DIM mb as new MemoryBlock(1)
  
  
  DIM iARRAY129() as Uint8    ' (  x  )  = ciPACKET_DATA_LENGTH + 1 CRC BYTE                (10) = BYTES 0 TO 9
  REDIM  iARRAY129((ciPACKET_DATA_LENGTH * 2)+ 1) ' *2forstereo (  x  )  = ciPACKET_DATA_LENGTH + 1 CRC BYTE      
  
  DIM iARRAY129_2() as Uint8    ' (  x  )  = ciPACKET_DATA_LENGTH + 1 CRC BYTE
  REDIM  iARRAY129_2((ciPACKET_DATA_LENGTH * 2)+ 1) ' *2forstereo (  x  )  = ciPACKET_DATA_LENGTH + 1 CRC BYTE
  
  DIM iARRAY_16_TO_8() as Uint8
  REDIM iARRAY_16_TO_8((ciPACKET_DATA_LENGTH * 2) * 2)    ' *2 FOR WORD  TO  BYTE  ' * 2 FOR STEREO
  
  
  DIM vbSKIP_SERIAL_OUT_SET AS  BOOLEAN
  vbSKIP_SERIAL_OUT_SET = TRUE
  
  DIM c,d as uint8
  DIM T,S as string
  DIM L,i AS  INTEGER
  
  DIM viERROR_REPEAT_COUNTER AS UINT8
  DIM viPROGRESSBAR_LOOP AS INTEGER
  DIM viSIXTEEN AS INTEGER
  DIM viCONFIG_BYTE AS UINT8
  DIM piSAMPLE_RATE2 AS  INTEGER
  DIM viSTRING_ASSEMBLED AS STRING
  DIM viTWOS_COMP_WORD AS UINT16
  DIM viTWOS_COMP_INTEGER1 AS INTEGER
  DIM viTWOS_COMP_INTEGER2 AS INTEGER
  DIM viINTEGER_8BIT1 AS INTEGER
  DIM viINTEGER_8BIT2 AS INTEGER
  DIM viLOW_BYTE, viHIGH_BYTE AS UINT16
  piPACKETS_DONE = 0  'REQUIRED FOR PROPERTY
  DIM viREC_LED AS INTEGER
  DIM viLOOP_TIMEOUT AS INTEGER
  DIM vbFIRST_PASS AS BOOLEAN
  vbFIRST_PASS = TRUE
  DIM viRESEND_LINE_RETURN AS INTEGER
  DIM vbERROR_SET AS BOOLEAN
  vbERROR_SET = FALSE
  
  '''''''''''''''16 ULAW TO 8''''''''''''''''
  DIM viSAMPLE_ULAW AS UINT16
  DIM viSIGN As UINT8
  DIM viEXPONENT AS UINT8
  DIM viMANTISSA AS UINT8
  DIM viULAW_BYTE As INTEGER
  DIM viTEMP_ULAW AS UINT8
  DIM viVAR1 As UINT8
  '''''''''''''''''''''''''''''
  
  ''''''''''''''' ADPCM ENCODE VARIABLES'''''''''''''                              ' 16 BIT
  DIM viSAMPLE_EN As INTEGER                            ' Word         ' 32767 TO -32767
  viSAMPLE_EN = 0
  DIM viPRED_SAMPLE_EN As INTEGER                   ' DWord       ' 32270 -34572
  viPRED_SAMPLE_EN = 0
  DIM viINDEX_EN As INTEGER                              ' DWord       ' 80 0 -1
  viINDEX_EN = 0
  DIM viSTATE_PREV_INDEX_EN As INTEGER          ' Byte            ' 80  0
  viSTATE_PREV_INDEX_EN = 0
  DIM viDIFF_EN As INTEGER 'Double  'FOR ABS      ' DWord         ' 32778 -32778
  viDIFF_EN = 0
  DIM viCODE_EN As INTEGER                              ' Byte            ' 15  0
  viCODE_EN = 0
  DIM viDIFFQ_EN As INTEGER                             ' Word            ' 13372  0
  viDIFFQ_EN = 0
  DIM viSTEP_EN As INTEGER                              ' Word             ' 15289  0
  viSTEP_EN = 0
  'DIM vPRED_SAMPLE_EN_TEMP As INTEGER        ' Byte              ' 34572  0
  'vPRED_SAMPLE_EN_TEMP = 0
  DIM vbHIGHBYTE_LOWBYTE_EN As BOOLEAN      ' Bit
  vbHIGHBYTE_LOWBYTE_EN = FALSE
  DIM vi2CODE_EN As INTEGER                           ' Byte
  vi2CODE_EN = 0
  DIM viARRAY_16_TO_4() as Uint8
  REDIM viARRAY_16_TO_4((ciPACKET_DATA_LENGTH * 4) * 2)    ' *4 FOR WORD  TO  1/2 BYTE   ' * 2 FOR STEREO
  
  DIM viCASE_FILE_TYPE AS INTEGER
  DIM viCRC AS UINT8
  DIM viTEMP AS UINT8
  DIM viCRC_ARRAY() as UINT8
  REDIM viCRC_ARRAY(256)
  
  '0 , 94 , 188 , 226 , 97 , 63 , 221 , 131 , 194 , 156
  viCRC_ARRAY(0) = 0
  viCRC_ARRAY(1) = 94
  viCRC_ARRAY(2) = 188
  viCRC_ARRAY(3) = 226
  viCRC_ARRAY(4) = 97
  viCRC_ARRAY(5) = 63
  viCRC_ARRAY(6) = 221
  viCRC_ARRAY(7) = 131
  viCRC_ARRAY(8) = 194
  viCRC_ARRAY(9) = 156
  
  '126 , 32 , 163 , 253 , 31 , 65 , 157 , 195 , 33 , 127
  viCRC_ARRAY(10) = 126
  viCRC_ARRAY(11) = 32
  viCRC_ARRAY(12) = 163
  viCRC_ARRAY(13) = 253
  viCRC_ARRAY(14) = 31
  viCRC_ARRAY(15) = 65
  viCRC_ARRAY(16) = 157
  viCRC_ARRAY(17) = 195
  viCRC_ARRAY(18) = 33
  viCRC_ARRAY(19) = 127
  
  '252 , 162 , 64 , 30 , 95 , 1 , 227 , 189 , 62 , 96
  viCRC_ARRAY(20) = 252
  viCRC_ARRAY(21) = 162
  viCRC_ARRAY(22) = 64
  viCRC_ARRAY(23) = 30
  viCRC_ARRAY(24) = 95
  viCRC_ARRAY(25) = 1
  viCRC_ARRAY(26) = 227
  viCRC_ARRAY(27) = 189
  viCRC_ARRAY(28) = 62
  viCRC_ARRAY(29) = 96
  
  ' 130 , 220 , 35 , 125 , 159 , 193 , 66 , 28 , 254 , 160
  viCRC_ARRAY(30) = 130
  viCRC_ARRAY(31) = 220
  viCRC_ARRAY(32) = 35
  viCRC_ARRAY(33) = 125
  viCRC_ARRAY(34) = 159
  viCRC_ARRAY(35) = 193
  viCRC_ARRAY(36) = 66
  viCRC_ARRAY(37) = 28
  viCRC_ARRAY(38) = 254
  viCRC_ARRAY(39) = 160
  
  '225 , 191 , 93 , 3 , 128 , 222 , 60 , 98 , 190 , 224
  viCRC_ARRAY(40) = 225
  viCRC_ARRAY(41) = 191
  viCRC_ARRAY(42) = 93
  viCRC_ARRAY(43) = 3
  viCRC_ARRAY(44) = 128
  viCRC_ARRAY(45) = 222
  viCRC_ARRAY(46) = 60
  viCRC_ARRAY(47) = 98
  viCRC_ARRAY(48) = 190
  viCRC_ARRAY(49) = 224
  
  '2 , 92 , 223 , 129 , 99 , 61 , 124 , 34 , 192 , 158
  viCRC_ARRAY(50) = 2
  viCRC_ARRAY(51) = 92
  viCRC_ARRAY(52) = 223
  viCRC_ARRAY(53) = 129
  viCRC_ARRAY(54) = 99
  viCRC_ARRAY(55) = 61
  viCRC_ARRAY(56) = 124
  viCRC_ARRAY(57) = 34
  viCRC_ARRAY(58) = 192
  viCRC_ARRAY(59) = 158
  
  '29 , 67 , 161 , 255 , 70 , 24 , 250 , 164 , 39 , 121
  viCRC_ARRAY(60) = 29
  viCRC_ARRAY(61) = 67
  viCRC_ARRAY(62) = 161
  viCRC_ARRAY(63) = 255
  viCRC_ARRAY(64) = 70
  viCRC_ARRAY(65) = 24
  viCRC_ARRAY(66) = 250
  viCRC_ARRAY(67) = 164
  viCRC_ARRAY(68) = 39
  viCRC_ARRAY(69) = 121
  
  '155 , 197 , 132 , 218 , 56 , 102 , 229 , 187 , 89 , 7
  viCRC_ARRAY(70) = 155
  viCRC_ARRAY(71) = 197
  viCRC_ARRAY(72) = 132
  viCRC_ARRAY(73) = 218
  viCRC_ARRAY(74) = 56
  viCRC_ARRAY(75) = 102
  viCRC_ARRAY(76) = 229
  viCRC_ARRAY(77) = 187
  viCRC_ARRAY(78) = 89
  viCRC_ARRAY(79) = 7
  
  '219 , 133 , 103 , 57 , 186 , 228 , 6 , 88 , 25 , 71
  viCRC_ARRAY(80) = 219
  viCRC_ARRAY(81) = 133
  viCRC_ARRAY(82) = 103
  viCRC_ARRAY(83) = 57
  viCRC_ARRAY(84) = 186
  viCRC_ARRAY(85) = 228
  viCRC_ARRAY(86) = 6
  viCRC_ARRAY(87) = 88
  viCRC_ARRAY(88) = 25
  viCRC_ARRAY(89) = 71
  
  ' 165 , 251 , 120 , 38 , 196 , 154 , 101 , 59 , 217 , 135
  viCRC_ARRAY(90) = 165
  viCRC_ARRAY(91) = 251
  viCRC_ARRAY(92) = 120
  viCRC_ARRAY(93) = 38
  viCRC_ARRAY(94) = 196
  viCRC_ARRAY(95) = 154
  viCRC_ARRAY(96) = 101
  viCRC_ARRAY(97) = 59
  viCRC_ARRAY(98) = 217
  viCRC_ARRAY(99) = 135
  
  '4 , 90 , 184 , 230 , 167 , 249 , 27 , 69 , 198 , 152
  viCRC_ARRAY(100) = 4
  viCRC_ARRAY(101) = 90
  viCRC_ARRAY(102) = 184
  viCRC_ARRAY(103) = 230
  viCRC_ARRAY(104) = 167
  viCRC_ARRAY(105) = 249
  viCRC_ARRAY(106) = 27
  viCRC_ARRAY(107) = 69
  viCRC_ARRAY(108) = 198
  viCRC_ARRAY(109) = 152
  
  '122 , 36 , 248 , 166 , 68 , 26 , 153 , 199 , 37 , 123
  viCRC_ARRAY(110) = 122
  viCRC_ARRAY(111) = 36
  viCRC_ARRAY(112) = 248
  viCRC_ARRAY(113) = 166
  viCRC_ARRAY(114) = 68
  viCRC_ARRAY(115) = 26
  viCRC_ARRAY(116) = 153
  viCRC_ARRAY(117) = 199
  viCRC_ARRAY(118) = 37
  viCRC_ARRAY(119) = 123
  
  '58 , 100 , 134 , 216 , 91 , 5 , 231 , 185 , 140 , 210
  viCRC_ARRAY(120) = 58
  viCRC_ARRAY(121) = 100
  viCRC_ARRAY(122) = 134
  viCRC_ARRAY(123) = 216
  viCRC_ARRAY(124) = 91
  viCRC_ARRAY(125) = 5
  viCRC_ARRAY(126) = 231
  viCRC_ARRAY(127) = 185
  viCRC_ARRAY(128) = 140
  viCRC_ARRAY(129) = 210
  
  ' 48 , 110 , 237 , 179 , 81 , 15 , 78 , 16 , 242 , 172
  viCRC_ARRAY(130) = 48
  viCRC_ARRAY(131) = 110
  viCRC_ARRAY(132) = 237
  viCRC_ARRAY(133) = 179
  viCRC_ARRAY(134) = 81
  viCRC_ARRAY(135) = 15
  viCRC_ARRAY(136) = 78
  viCRC_ARRAY(137) = 16
  viCRC_ARRAY(138) = 242
  viCRC_ARRAY(139) = 172
  
  '47 , 113 , 147 , 205 , 17 , 79 , 173 , 243 , 112 , 46
  viCRC_ARRAY(140) = 47
  viCRC_ARRAY(141) = 113
  viCRC_ARRAY(142) = 147
  viCRC_ARRAY(143) = 205
  viCRC_ARRAY(144) = 17
  viCRC_ARRAY(145) = 79
  viCRC_ARRAY(146) = 173
  viCRC_ARRAY(147) = 243
  viCRC_ARRAY(148) = 112
  viCRC_ARRAY(149) = 46
  
  '204 , 146 , 211 , 141 , 111 , 49 , 178 , 236 , 14 , 80
  viCRC_ARRAY(150) = 204
  viCRC_ARRAY(151) = 146
  viCRC_ARRAY(152) = 211
  viCRC_ARRAY(153) = 141
  viCRC_ARRAY(154) = 111
  viCRC_ARRAY(155) = 49
  viCRC_ARRAY(156) = 178
  viCRC_ARRAY(157) = 236
  viCRC_ARRAY(158) = 14
  viCRC_ARRAY(159) = 80
  
  '175 , 241 , 19 , 77 , 206 , 144 , 114 , 44 , 109 , 51
  viCRC_ARRAY(160) = 175
  viCRC_ARRAY(161) = 241
  viCRC_ARRAY(162) = 19
  viCRC_ARRAY(163) = 77
  viCRC_ARRAY(164) = 206
  viCRC_ARRAY(165) = 144
  viCRC_ARRAY(166) = 114
  viCRC_ARRAY(167) = 44
  viCRC_ARRAY(168) = 109
  viCRC_ARRAY(169) = 51
  
  '209 , 143 , 12 , 82 , 176 , 238 , 50 , 108 , 142 , 208
  viCRC_ARRAY(170) = 209
  viCRC_ARRAY(171) = 143
  viCRC_ARRAY(172) = 12
  viCRC_ARRAY(173) = 82
  viCRC_ARRAY(174) = 176
  viCRC_ARRAY(175) = 238
  viCRC_ARRAY(176) = 50
  viCRC_ARRAY(177) = 108
  viCRC_ARRAY(178) = 142
  viCRC_ARRAY(179) = 208
  
  '83 , 13 , 239 , 177 , 240 , 174 , 76 , 18 , 145 , 207
  viCRC_ARRAY(180) = 83
  viCRC_ARRAY(181) = 13
  viCRC_ARRAY(182) = 239
  viCRC_ARRAY(183) = 177
  viCRC_ARRAY(184) = 240
  viCRC_ARRAY(185) = 174
  viCRC_ARRAY(186) = 76
  viCRC_ARRAY(187) = 18
  viCRC_ARRAY(188) = 145
  viCRC_ARRAY(189) = 207
  
  '45 , 115 , 202 , 148 , 118 , 40 , 171 , 245 , 23 , 73
  viCRC_ARRAY(190) = 45
  viCRC_ARRAY(191) = 115
  viCRC_ARRAY(192) = 202
  viCRC_ARRAY(193) = 148
  viCRC_ARRAY(194) = 118
  viCRC_ARRAY(195) = 40
  viCRC_ARRAY(196) = 171
  viCRC_ARRAY(197) = 245
  viCRC_ARRAY(198) = 23
  viCRC_ARRAY(199) = 73
  
  '8 , 86 , 180 , 234 , 105 , 55 , 213 , 139 , 87 , 9
  viCRC_ARRAY(200) = 8
  viCRC_ARRAY(201) = 86
  viCRC_ARRAY(202) = 180
  viCRC_ARRAY(203) = 234
  viCRC_ARRAY(204) = 105
  viCRC_ARRAY(205) = 55
  viCRC_ARRAY(206) = 213
  viCRC_ARRAY(207) = 139
  viCRC_ARRAY(208) = 87
  viCRC_ARRAY(209) = 9
  
  '235 , 181 , 54 , 104 , 138 , 212 , 149 , 203 , 41 , 119
  viCRC_ARRAY(210) = 235
  viCRC_ARRAY(211) = 181
  viCRC_ARRAY(212) = 54
  viCRC_ARRAY(213) = 104
  viCRC_ARRAY(214) = 138
  viCRC_ARRAY(215) = 212
  viCRC_ARRAY(216) = 149
  viCRC_ARRAY(217) = 203
  viCRC_ARRAY(218) = 41
  viCRC_ARRAY(219) = 119
  
  '244 , 170 , 72 , 22 , 233 , 183 , 85 , 11 , 136 , 214
  viCRC_ARRAY(220) = 244
  viCRC_ARRAY(221) = 170
  viCRC_ARRAY(222) = 72
  viCRC_ARRAY(223) = 22
  viCRC_ARRAY(224) = 233
  viCRC_ARRAY(225) = 183
  viCRC_ARRAY(226) = 85
  viCRC_ARRAY(227) = 11
  viCRC_ARRAY(228) = 136
  viCRC_ARRAY(229) = 214
  
  '52 , 106 , 43 , 117 , 151 , 201 , 74 , 20 , 246 , 168
  viCRC_ARRAY(230) = 52
  viCRC_ARRAY(231) = 106
  viCRC_ARRAY(232) = 43
  viCRC_ARRAY(233) = 117
  viCRC_ARRAY(234) = 151
  viCRC_ARRAY(235) = 201
  viCRC_ARRAY(236) = 74
  viCRC_ARRAY(237) = 20
  viCRC_ARRAY(238) = 246
  viCRC_ARRAY(239) = 168
  
  ' 116 , 42 , 200 , 150 , 21 , 75 , 169 , 247 , 182 , 232
  viCRC_ARRAY(240) = 116
  viCRC_ARRAY(241) = 42
  viCRC_ARRAY(242) = 200
  viCRC_ARRAY(243) = 150
  viCRC_ARRAY(244) = 21
  viCRC_ARRAY(245) = 75
  viCRC_ARRAY(246) = 169
  viCRC_ARRAY(247) = 247
  viCRC_ARRAY(248) = 182
  viCRC_ARRAY(249) = 232
  
  '10 , 84 , 215 , 137 , 107 , 53
  viCRC_ARRAY(250) = 10
  viCRC_ARRAY(251) = 84
  viCRC_ARRAY(252) = 215
  viCRC_ARRAY(253) = 137
  viCRC_ARRAY(254) = 107
  viCRC_ARRAY(255) = 53
  
  
  
  
  
  DIM viULAW_ARRAY() as UINT8
  REDIM viULAW_ARRAY(256)'exp_lut:
  
  '0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,_
  viULAW_ARRAY(0) = 0
  viULAW_ARRAY(1) = 0
  viULAW_ARRAY(2) = 1
  viULAW_ARRAY(3) = 1
  viULAW_ARRAY(4) = 2
  viULAW_ARRAY(5) = 2
  viULAW_ARRAY(6) = 2
  viULAW_ARRAY(7) = 2
  viULAW_ARRAY(8) = 3
  viULAW_ARRAY(9) = 3
  viULAW_ARRAY(10) = 3
  viULAW_ARRAY(11) = 3
  viULAW_ARRAY(12) = 3
  viULAW_ARRAY(13) = 3
  viULAW_ARRAY(14) = 3
  viULAW_ARRAY(15) = 3
  
  '4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,_
  viULAW_ARRAY(16) = 4
  viULAW_ARRAY(17) = 4
  viULAW_ARRAY(18) = 4
  viULAW_ARRAY(19) = 4
  viULAW_ARRAY(20) = 4
  viULAW_ARRAY(21) = 4
  viULAW_ARRAY(22) = 4
  viULAW_ARRAY(23) = 4
  viULAW_ARRAY(24) = 4
  viULAW_ARRAY(25) = 4
  viULAW_ARRAY(26) = 4
  viULAW_ARRAY(27) = 4
  viULAW_ARRAY(28) = 4
  viULAW_ARRAY(29) = 4
  viULAW_ARRAY(30) = 4
  viULAW_ARRAY(31) = 4
  
  '5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,_
  viULAW_ARRAY(32) = 5
  viULAW_ARRAY(33) = 5
  viULAW_ARRAY(34) = 5
  viULAW_ARRAY(35) = 5
  viULAW_ARRAY(36) = 5
  viULAW_ARRAY(37) = 5
  viULAW_ARRAY(38) = 5
  viULAW_ARRAY(39) = 5
  viULAW_ARRAY(40) = 5
  viULAW_ARRAY(41) = 5
  viULAW_ARRAY(42) = 5
  viULAW_ARRAY(43) = 5
  viULAW_ARRAY(44) = 5
  viULAW_ARRAY(45) = 5
  viULAW_ARRAY(46) = 5
  viULAW_ARRAY(47) = 5
  
  '5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,_
  viULAW_ARRAY(48) = 5
  viULAW_ARRAY(49) = 5
  viULAW_ARRAY(50) = 5
  viULAW_ARRAY(51) = 5
  viULAW_ARRAY(52) = 5
  viULAW_ARRAY(53) = 5
  viULAW_ARRAY(54) = 5
  viULAW_ARRAY(55) = 5
  viULAW_ARRAY(56) = 5
  viULAW_ARRAY(57) = 5
  viULAW_ARRAY(58) = 5
  viULAW_ARRAY(59) = 5
  viULAW_ARRAY(60) = 5
  viULAW_ARRAY(61) = 5
  viULAW_ARRAY(62) = 5
  viULAW_ARRAY(63) = 5
  
  '6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,_
  viULAW_ARRAY(64) = 6
  viULAW_ARRAY(65) = 6
  viULAW_ARRAY(66) = 6
  viULAW_ARRAY(67) = 6
  viULAW_ARRAY(68) = 6
  viULAW_ARRAY(69) = 6
  viULAW_ARRAY(70) = 6
  viULAW_ARRAY(71) = 6
  viULAW_ARRAY(72) = 6
  viULAW_ARRAY(73) = 6
  viULAW_ARRAY(74) = 6
  viULAW_ARRAY(75) = 6
  viULAW_ARRAY(76) = 6
  viULAW_ARRAY(77) = 6
  viULAW_ARRAY(78) = 6
  viULAW_ARRAY(79) = 6
  
  '6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,_
  viULAW_ARRAY(80) = 6
  viULAW_ARRAY(81) = 6
  viULAW_ARRAY(82) = 6
  viULAW_ARRAY(83) = 6
  viULAW_ARRAY(84) = 6
  viULAW_ARRAY(85) = 6
  viULAW_ARRAY(86) = 6
  viULAW_ARRAY(87) = 6
  viULAW_ARRAY(88) = 6
  viULAW_ARRAY(89) = 6
  viULAW_ARRAY(90) = 6
  viULAW_ARRAY(91) = 6
  viULAW_ARRAY(92) = 6
  viULAW_ARRAY(93) = 6
  viULAW_ARRAY(94) = 6
  viULAW_ARRAY(95) = 6
  
  '6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,_
  viULAW_ARRAY(96) = 6
  viULAW_ARRAY(97) = 6
  viULAW_ARRAY(98) = 6
  viULAW_ARRAY(99) = 6
  viULAW_ARRAY(100) = 6
  viULAW_ARRAY(101) = 6
  viULAW_ARRAY(102) = 6
  viULAW_ARRAY(103) = 6
  viULAW_ARRAY(104) = 6
  viULAW_ARRAY(105) = 6
  viULAW_ARRAY(106) = 6
  viULAW_ARRAY(107) = 6
  viULAW_ARRAY(108) = 6
  viULAW_ARRAY(109) = 6
  viULAW_ARRAY(110) = 6
  viULAW_ARRAY(111) = 6
  
  '6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,_
  viULAW_ARRAY(112) = 6
  viULAW_ARRAY(113) = 6
  viULAW_ARRAY(114) = 6
  viULAW_ARRAY(115) = 6
  viULAW_ARRAY(116) = 6
  viULAW_ARRAY(117) = 6
  viULAW_ARRAY(118) = 6
  viULAW_ARRAY(119) = 6
  viULAW_ARRAY(120) = 6
  viULAW_ARRAY(121) = 6
  viULAW_ARRAY(122) = 6
  viULAW_ARRAY(123) = 6
  viULAW_ARRAY(124) = 6
  viULAW_ARRAY(125) = 6
  viULAW_ARRAY(126) = 6
  viULAW_ARRAY(127) = 6
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(128) = 7
  viULAW_ARRAY(129) = 7
  viULAW_ARRAY(130) = 7
  viULAW_ARRAY(131) = 7
  viULAW_ARRAY(132) = 7
  viULAW_ARRAY(133) = 7
  viULAW_ARRAY(134) = 7
  viULAW_ARRAY(135) = 7
  viULAW_ARRAY(136) = 7
  viULAW_ARRAY(137) = 7
  viULAW_ARRAY(138) = 7
  viULAW_ARRAY(139) = 7
  viULAW_ARRAY(140) = 7
  viULAW_ARRAY(141) = 7
  viULAW_ARRAY(142) = 7
  viULAW_ARRAY(143) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(144) = 7
  viULAW_ARRAY(145) = 7
  viULAW_ARRAY(146) = 7
  viULAW_ARRAY(147) = 7
  viULAW_ARRAY(148) = 7
  viULAW_ARRAY(149) = 7
  viULAW_ARRAY(150) = 7
  viULAW_ARRAY(151) = 7
  viULAW_ARRAY(152) = 7
  viULAW_ARRAY(153) = 7
  viULAW_ARRAY(154) = 7
  viULAW_ARRAY(155) = 7
  viULAW_ARRAY(156) = 7
  viULAW_ARRAY(157) = 7
  viULAW_ARRAY(158) = 7
  viULAW_ARRAY(159) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(160) = 7
  viULAW_ARRAY(161) = 7
  viULAW_ARRAY(162) = 7
  viULAW_ARRAY(163) = 7
  viULAW_ARRAY(164) = 7
  viULAW_ARRAY(165) = 7
  viULAW_ARRAY(166) = 7
  viULAW_ARRAY(167) = 7
  viULAW_ARRAY(168) = 7
  viULAW_ARRAY(169) = 7
  viULAW_ARRAY(170) = 7
  viULAW_ARRAY(171) = 7
  viULAW_ARRAY(172) = 7
  viULAW_ARRAY(173) = 7
  viULAW_ARRAY(174) = 7
  viULAW_ARRAY(175) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(176) = 7
  viULAW_ARRAY(177) = 7
  viULAW_ARRAY(178) = 7
  viULAW_ARRAY(179) = 7
  viULAW_ARRAY(180) = 7
  viULAW_ARRAY(181) = 7
  viULAW_ARRAY(182) = 7
  viULAW_ARRAY(183) = 7
  viULAW_ARRAY(184) = 7
  viULAW_ARRAY(185) = 7
  viULAW_ARRAY(186) = 7
  viULAW_ARRAY(187) = 7
  viULAW_ARRAY(188) = 7
  viULAW_ARRAY(189) = 7
  viULAW_ARRAY(190) = 7
  viULAW_ARRAY(191) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(192) = 7
  viULAW_ARRAY(193) = 7
  viULAW_ARRAY(194) = 7
  viULAW_ARRAY(195) = 7
  viULAW_ARRAY(196) = 7
  viULAW_ARRAY(197) = 7
  viULAW_ARRAY(198) = 7
  viULAW_ARRAY(199) = 7
  viULAW_ARRAY(200) = 7
  viULAW_ARRAY(201) = 7
  viULAW_ARRAY(202) = 7
  viULAW_ARRAY(203) = 7
  viULAW_ARRAY(204) = 7
  viULAW_ARRAY(205) = 7
  viULAW_ARRAY(206) = 7
  viULAW_ARRAY(207) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(208) = 7
  viULAW_ARRAY(209) = 7
  viULAW_ARRAY(210) = 7
  viULAW_ARRAY(211) = 7
  viULAW_ARRAY(212) = 7
  viULAW_ARRAY(213) = 7
  viULAW_ARRAY(214) = 7
  viULAW_ARRAY(215) = 7
  viULAW_ARRAY(216) = 7
  viULAW_ARRAY(217) = 7
  viULAW_ARRAY(218) = 7
  viULAW_ARRAY(219) = 7
  viULAW_ARRAY(220) = 7
  viULAW_ARRAY(221) = 7
  viULAW_ARRAY(222) = 7
  viULAW_ARRAY(223) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(224) = 7
  viULAW_ARRAY(225) = 7
  viULAW_ARRAY(226) = 7
  viULAW_ARRAY(227) = 7
  viULAW_ARRAY(228) = 7
  viULAW_ARRAY(229) = 7
  viULAW_ARRAY(230) = 7
  viULAW_ARRAY(231) = 7
  viULAW_ARRAY(232) = 7
  viULAW_ARRAY(233) = 7
  viULAW_ARRAY(234) = 7
  viULAW_ARRAY(235) = 7
  viULAW_ARRAY(236) = 7
  viULAW_ARRAY(237) = 7
  viULAW_ARRAY(238) = 7
  viULAW_ARRAY(239) = 7
  
  '7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,_
  viULAW_ARRAY(240) = 7
  viULAW_ARRAY(241) = 7
  viULAW_ARRAY(242) = 7
  viULAW_ARRAY(243) = 7
  viULAW_ARRAY(244) = 7
  viULAW_ARRAY(245) = 7
  viULAW_ARRAY(246) = 7
  viULAW_ARRAY(247) = 7
  viULAW_ARRAY(248) = 7
  viULAW_ARRAY(249) = 7
  viULAW_ARRAY(250) = 7
  viULAW_ARRAY(251) = 7
  viULAW_ARRAY(252) = 7
  viULAW_ARRAY(253) = 7
  viULAW_ARRAY(254) = 7
  viULAW_ARRAY(255) = 7
  
  
  
  
  
  IF LEN(EditField_NAME_FILE.text) = 0 THEN    
    MSGBOX "NAME FILE"
    BEEP
    GOTO DONE_THREAD1
  END IF
  
  pbQuit = false
  
  EditField_RB_TERM.AppendText("  " + CHR(13))
  SubRB_TERM_TO_END
  EditField_RB_TERM.AppendText(" SENDING TO PIC" + CHR(13))
  SubRB_TERM_TO_END
  
  S = EditField_BROWSE_WAV_FILE_PATH.text
  f=GetfolderItem(S)
  if f<>Nil then   ' or 'if f.exists then
  ELSE
    msgbox "FILE NOT FOUND"
  END IF
  
  stream =f.openasbinaryfile(false)
  IF pbWAVE_NOT_DATA_FILE = TRUE THEN
    Stream.Position = 44 '48 FOR DATA IN ROWS AS IN FILESNOOP, OR 0 FOR COMPLETE FILE, OR 44 FOR FIRST DATA BYTE
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''SEND CONFIGURATION BYTE    FIRST BYTE''''''''''''''''''''''''''''''''
    
    piSAMPLE_RATE2 = piSAMPLE_RATE / 1000
    S = STR(piSAMPLE_RATE2)
    EditField_RB_TERM.AppendText(" SAMPLE_RATE =  " + S + "K" + CHR(13))
    SubRB_TERM_TO_END
    
    IF  piSAMPLE_RATE2 < 6 or piSAMPLE_RATE2 > 44 THEN
      EditField_RB_TERM.AppendText(" SAMPLE RATE <6 OR >44    EXITING" + CHR(13))
      SubRB_TERM_TO_END
      BEEP
      GOTO DONE_THREAD1
    END IF
    
    viSTRING_ASSEMBLED = Bin( piSAMPLE_RATE2 ) 'BIN returns "111111's "
    
    S = STR(piBITS_PER_SAMPLE)
    EditField_RB_TERM.AppendText(" BITS_PER_SAMPLE =  " + S + CHR(13))
    SubRB_TERM_TO_END
    
    IF piBITS_PER_SAMPLE = 8 OR piBITS_PER_SAMPLE = 16 THEN
    ELSE
      S = STR(piBITS_PER_SAMPLE)
      EditField_RB_TERM.AppendText(" " +  S + " NOT A VALID BIT SIZE    EXITING" + CHR(13))
      SubRB_TERM_TO_END
      BEEP
      GOTO DONE_THREAD1
    END IF
    
    
     ' 8 to 8
    IF piBITS_PER_SAMPLE = 8 THEN 
      viSTRING_ASSEMBLED = viSTRING_ASSEMBLED + "01"
      viCASE_FILE_TYPE = 10
    END IF
    
    '16 BIT
    IF piBITS_PER_SAMPLE = 16 AND (PopupMenu_BITS_PER_SAMPLE_16.ListIndex) = 0 THEN  ' 16 to 16
      viSTRING_ASSEMBLED = viSTRING_ASSEMBLED + "11"
      viCASE_FILE_TYPE = 12
    END IF
    IF piBITS_PER_SAMPLE = 16 AND (PopupMenu_BITS_PER_SAMPLE_16.ListIndex) = 1 THEN  ' 16 ULAW to 8
      viSTRING_ASSEMBLED = viSTRING_ASSEMBLED + "10"
      viCASE_FILE_TYPE = 13
    END IF
    IF piBITS_PER_SAMPLE = 16 AND (PopupMenu_BITS_PER_SAMPLE_16.ListIndex) = 2 THEN  ' 16 to 8 play 8
      viSTRING_ASSEMBLED = viSTRING_ASSEMBLED + "01"                                               ' or  8 to 8 play 8
      viCASE_FILE_TYPE = 11
    END IF
    IF piBITS_PER_SAMPLE = 16 AND (PopupMenu_BITS_PER_SAMPLE_16.ListIndex) = 3 THEN  ' 16 to ADPCM 4 bit 
      viSTRING_ASSEMBLED = viSTRING_ASSEMBLED + "00"
      viCASE_FILE_TYPE = 14
    END IF
    
    viCONFIG_BYTE = val("&b"+ viSTRING_ASSEMBLED)
    
  ELSE   ' DATA FILE
    Stream.Position = 0
    
    viCONFIG_BYTE = 0   'DATA FILE
    viCASE_FILE_TYPE = 10
  END IF
  
  
  
  viLOOP_TIMEOUT = 0
  LOOP_CONFIG_BYTE_SEND:
  
  IF Serial1.ClearToSend = TRUE THEN
    mb.Byte( 0 ) = viCONFIG_BYTE
    Serial1.Write( mb )
    Serial1.XmitWait
  ELSE
    viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
    
    IF viLOOP_TIMEOUT > 200 THEN   ' >200 with 1 MILLISECsleep = ABOUT 2 SEC EVEN THOUGH 2 SEC IS 2000 MILLISEC
      EditField_RB_TERM.AppendText(" SEND CONFIG_BYTE TIMED OUT,  "+ CHR(13))
      SubRB_TERM_TO_END
      BEEP
      GOTO DONE_THREAD1
    end if
    Thread1.Sleep (1) ' milliseconds
    GOTO LOOP_CONFIG_BYTE_SEND
  END IF
  
  viLOOP_TIMEOUT = 0
  
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''END     SEND CONFIGURATION BYTE    FIRST BYTE''''''''''''''''''''''''''''''''
  
  
  
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''SEND 16 BYTE FILE NAME   2nd TO 17th BYTE'S''''''''''''''''''''''''''''''''
  
  IF LEN(EditField_NAME_FILE.text) > 16 THEN
    T = LEFT(EditField_NAME_FILE.text, 16)
  END IF
  
  IF LEN(EditField_NAME_FILE.text) < 16 THEN
    L = LEN(EditField_NAME_FILE.text)
    L = 16 - L
    T = EditField_NAME_FILE.text
    FOR i = 1 TO L
      T = T + " "
    NEXT
  ELSE
    T = EditField_NAME_FILE.text
  END IF
  
  EditField_RB_TERM.AppendText(" FILE NAME = [" + T + "]" + CHR(13))
  SubRB_TERM_TO_END
  
  viLOOP_TIMEOUT = 0
  
  FOR i = 0 TO 15
    LOOP_FILE_NAME_BYTE_SEND:
    S = Mid(T, i+1, 1)
    
    IF Serial1.ClearToSend = TRUE THEN
      Serial1.Write(S)
      Serial1.XmitWait
      viLOOP_TIMEOUT = 0
    ELSE
      viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
      
      IF viLOOP_TIMEOUT > 200 THEN   ' >200 with 1 MILLISECsleep = ABOUT 2 SEC EVEN THOUGH 2 SEC IS 2000 MILLISEC
        EditField_RB_TERM.AppendText(" SEND FILE NAME BYTE TIMED OUT,  "+ CHR(13))
        SubRB_TERM_TO_END
        BEEP
        GOTO DONE_THREAD1
      end if
      Thread1.Sleep (1) ' milliseconds  
      GOTO LOOP_FILE_NAME_BYTE_SEND
    END IF
  NEXT
      
  viLOOP_TIMEOUT = 0
  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''END    SEND 16 BYTE FILE NAME   2nd TO 17th BYTE'S''''''''''''''''''''''''''''''''
  
            
  
                      
  ''''''''''''''''''''''''''''''''''''''''''''''''' SEND DATA ''''''''''''''''''''''''''''''''''''''''''
  EditField_RB_TERM.AppendText(" SENDING DATA "+ CHR(13))
  SubRB_TERM_TO_END
  do  '[[[[[[[[[[[[[[[[[[[[[ ' SEND TO PIC LOOP
    
    if pbQuit then 
      GOTO DONE_THREAD1
    END IF
                                         
    SERIAL1.Poll   ' ALSO IN SERIAL1 DATA AVAILABLE
    S =SERIAL1.ReadAll(Encodings.WindowsANSI)
    EditField_PIC_TERM.AppendText(S)
    
    viERROR_REPEAT_COUNTER = 0  
    
    Select Case viCASE_FILE_TYPE
      
    CASE 10 
      '''''''''''''''''''''''''''''''''''' 8 BIT TO 8 BIT '''''''''''''''''''''''''''''''''           'viCONFIG_BYTE = 0 = 8 BIT TO 8 BIT   DATA FILE
      FOR i = 0 TO (ciPACKET_DATA_LENGTH * piCHANNELS) - 1
        
        iARRAY129(i)= stream.readbyte
        
        '"""""""""""""""""""""""""''''''''''    ' SHOWS HEX VERSION OF WAVE FILE
        'IF viSIXTEEN > 15 THEN
        'viSIXTEEN = 0
        'EditField_RB_TERM.AppendText(CHR(13))
        'END IF
        'viSIXTEEN = viSIXTEEN + 1
        'S = HEX(iARRAY129(i))
        'EditField_RB_TERM.AppendText(S + " ")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
      NEXT
      
      IF piCHANNELS = 2 THEN
        c = 0
        FOR i = 0 TO ciPACKET_DATA_LENGTH - 1
          viINTEGER_8BIT1 = iARRAY129(c)
          c = c + 1
          viINTEGER_8BIT2 = iARRAY129(c)
          c = c + 1
          
          iARRAY129(i)=  ((viINTEGER_8BIT1 + viINTEGER_8BIT2)  / 2)   ' AVERAGE STEREO TO MONO
        NEXT
      END IF          
      '''''''''''''''''''''''''''''''''''' END 8 BIT TO 8 BIT ''''''''''''''''''''''''''''''''' 
      
      
      
    CASE 11
      '''''''''''''''''''''''''''''''''''' 16 BIT TO 8 BIT '''''''''''''''''''''''''''''''''
      FOR i = 0 TO ((ciPACKET_DATA_LENGTH * 2) * piCHANNELS) - 1    ' *2 FOR WORD
        iARRAY_16_TO_8(i)= stream.readbyte
        
        '"""""""""""""""""""""""""'''''''''' 'OK    ' SHOWS HEX VERSION OF WAVE FILE
        'IF viSIXTEEN > 15 THEN
        'viSIXTEEN = 0
        'EditField_RB_TERM.AppendText(CHR(13))
        'END IF
        'viSIXTEEN = viSIXTEEN + 1
        'S = HEX(iARRAY129(i))
        'EditField_RB_TERM.AppendText(S + " ")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
      NEXT
      
      ' CONVERT TWO'S COMPLEMENT (-32768 TO 32767) TO (0 TO 65535)
      ' 16 BIT WAVE IS TWO'S COMPLEMENT
      c = 0
      d = 0
      FOR i = 0 TO (ciPACKET_DATA_LENGTH - 1)  ' / 2      ' READS 2 EACH LOOP
        
        SECOND_PASS_16_TO_8:
        viLOW_BYTE = iARRAY_16_TO_8(c)   ' read    two's complement   low byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = iARRAY_16_TO_8(c)   ' read    two's complement   high byte from array
        
        viTWOS_COMP_WORD = Shiftleft (viTWOS_COMP_WORD, 8)
        
        viTWOS_COMP_WORD = viTWOS_COMP_WORD + viLOW_BYTE
        c = c + 1
        
        IF viTWOS_COMP_WORD <= 32767 THEN  ' POSITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD + 32768
        ELSE   ' NEGITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD - 32768
        END IF
        
        IF piCHANNELS = 2 THEN
          IF vbFIRST_PASS = TRUE THEN
            vbFIRST_PASS = FALSE
            viTWOS_COMP_INTEGER1 = viTWOS_COMP_WORD
            GOTO SECOND_PASS_16_TO_8
            
          ELSE   ' vbFIRST_PASS = FALSE
            vbFIRST_PASS = TRUE
            viTWOS_COMP_INTEGER2 = viTWOS_COMP_WORD
            viTWOS_COMP_WORD = ((viTWOS_COMP_INTEGER2 + viTWOS_COMP_INTEGER1)  / 2)   ' AVERAGE STEREO TO MONO
            
          END IF
          
        END IF
        
        viTWOS_COMP_WORD = viTWOS_COMP_WORD/ 256   ' /256 = 16 BIT TO 8
        
        iARRAY129(i)  = viTWOS_COMP_WORD   ' NOW BYTE SIZE
        
      NEXT
      
      '''''''''''''''''''''''''''''''''''' END 16 BIT TO 8 BIT '''''''''''''''''''''''''''''''''
      
      
      
      
    CASE 12
       '''''''''''''''''''''''''''''''''''' 16 BIT TO 16 BIT '''''''''''''''''''''''''''''''''       
      FOR i = 0 TO (ciPACKET_DATA_LENGTH * piCHANNELS) - 1
        iARRAY129(i)= stream.readbyte
        
        '"""""""""""""""""""""""""'''''''''' 'OK    ' SHOWS HEX VERSION OF WAVE FILE
        'IF viSIXTEEN > 15 THEN
        'viSIXTEEN = 0
        'EditField_RB_TERM.AppendText(CHR(13))
        'END IF
        'viSIXTEEN = viSIXTEEN + 1
        'S = HEX(iARRAY129(i))
        'EditField_RB_TERM.AppendText(S + " ")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
      NEXT
      
       ' CONVERT TWO'S COMPLEMENT (-32768 TO 32767) TO (0 TO 65535)
       ' 16 BIT WAVE IS TWO'S COMPLEMENT
      c = 0
      d = 0
      FOR i = 0 TO ((ciPACKET_DATA_LENGTH)- 1) / 2
        
        SECOND_PASS_16_TO_16:
        viLOW_BYTE = iARRAY129(c)   ' read    two's complement   low byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = iARRAY129(c)   ' read    two's complement   high byte from array
          
        viTWOS_COMP_WORD = Shiftleft (viTWOS_COMP_WORD, 8)    
        viTWOS_COMP_WORD = viTWOS_COMP_WORD + viLOW_BYTE
        c = c + 1
        
        IF viTWOS_COMP_WORD <= 32767 THEN  ' POSITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD + 32768
        ELSE   ' NEGITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD - 32768
        END IF
        
        IF piCHANNELS = 2 THEN
          IF vbFIRST_PASS = TRUE THEN
            vbFIRST_PASS = FALSE
            viTWOS_COMP_INTEGER1 = viTWOS_COMP_WORD
            GOTO SECOND_PASS_16_TO_16
            
          ELSE   ' vbFIRST_PASS = FALSE
            vbFIRST_PASS = TRUE
            viTWOS_COMP_INTEGER2 = viTWOS_COMP_WORD
            viTWOS_COMP_WORD = ((viTWOS_COMP_INTEGER2 + viTWOS_COMP_INTEGER1)  / 2)   ' AVERAGE STEREO TO MONO
            
          END IF
          
        END IF
        
        viLOW_BYTE = Shiftleft (viTWOS_COMP_WORD, 8) 
        viLOW_BYTE = Shiftright (viLOW_BYTE, 8)
        iARRAY129(d) = viLOW_BYTE    ' load   non two's complement   low byte into array
        d = d + 1
        
        viHIGH_BYTE =  Shiftright (viTWOS_COMP_WORD, 8)   
        iARRAY129(d) = viHIGH_BYTE    ' load   non two's complement   high byte into array
        d = d + 1
      NEXT
      
      '''''''''''''''''''''''''''''''''''' END 16 BIT TO 16 BIT '''''''''''''''''''''''''''''''''
      
      
      
      
      
    CASE 13
      '''''''''''''''''''''''''''''''''''' 16 BIT ULAW TO 8 BIT '''''''''''''''''''''''''''''''''   
      FOR i = 0 TO ((ciPACKET_DATA_LENGTH * 2) * piCHANNELS) - 1    ' *2 FOR WORD
        iARRAY_16_TO_8(i)= stream.readbyte
        
        '"""""""""""""""""""""""""'''''''''' 'OK    ' SHOWS HEX VERSION OF WAVE FILE
        'IF viSIXTEEN > 15 THEN
        'viSIXTEEN = 0
        'EditField_RB_TERM.AppendText(CHR(13))
        'END IF
        'viSIXTEEN = viSIXTEEN + 1
        'S = HEX(iARRAY129(i))
        'EditField_RB_TERM.AppendText(S + " ")
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
      NEXT
      
      ' DOES NOT        CONVERT TWO'S COMPLEMENT (-32768 TO 32767) TO (0 TO 65535)
      ' 16 BIT WAVE IS TWO'S COMPLEMENT
      c = 0
      d = 0
      
      FOR i = 0 TO (ciPACKET_DATA_LENGTH - 1)  '      ' READS 2 EACH LOOP    OUTS 1 BYTE EACH LOOP
        
        SECOND_PASS_ULAW:
        viLOW_BYTE = iARRAY_16_TO_8(c)   ' read    two's complement   low byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = iARRAY_16_TO_8(c)   ' read    two's complement   high byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = Shiftleft (viTWOS_COMP_WORD, 8)
        
        viTWOS_COMP_WORD = viTWOS_COMP_WORD + viLOW_BYTE
         ' NOW IS TWO'S COMP WORD
        
        IF piCHANNELS = 2 THEN
          IF viTWOS_COMP_WORD <= 32767 THEN  ' POSITIVE
            viTWOS_COMP_WORD = viTWOS_COMP_WORD + 32768
          ELSE   ' NEGITIVE
            viTWOS_COMP_WORD = viTWOS_COMP_WORD - 32768
          END IF
          ' NOW IS NON TWO'S COMP WORD FOR AVERAGING
          
          IF vbFIRST_PASS = TRUE THEN
            vbFIRST_PASS = FALSE
            viTWOS_COMP_INTEGER1 = viTWOS_COMP_WORD
            GOTO SECOND_PASS_ULAW
            
          ELSE   ' vbFIRST_PASS = FALSE
            vbFIRST_PASS = TRUE
            viTWOS_COMP_INTEGER2 = viTWOS_COMP_WORD
            viTWOS_COMP_WORD = ((viTWOS_COMP_INTEGER2 + viTWOS_COMP_INTEGER1)  / 2)   ' AVERAGE STEREO TO MONO
            
          END IF
          
          ' IS NON TWO'S COMP WORD AVERAGED
          IF viTWOS_COMP_WORD >= 32768 THEN  ' POSITIVE
            viTWOS_COMP_WORD = viTWOS_COMP_WORD - 32768
          ELSE   ' NEGITIVE
            viTWOS_COMP_WORD = viTWOS_COMP_WORD + 32768
          END IF
          ' NOW IS RETURNED TO TWO'S COMP WORD
          
        END IF
        
        
        
        viSAMPLE_ULAW = viTWOS_COMP_WORD'''''''''''''''''''
        
        ' ULAW Encoder
        ' Input  : Signed 16-bit linear value held in SAMPLE   (TWO'S COMPLEMENT)
        ' Output : 8-bit ulaw sample retuned in ULAW_BYTE
        
            'ULAW_ENCODER:
            'Get the sample into sign-magnitude.
        viSIGN = Shiftright (viSAMPLE_ULAW, 8)
        
        viSIGN = Bitwise.BitAnd (viSIGN, 128)
        
        ''''IF > 32767 THEN IS NEGATIVE TWOS COMPLEMENT
        viTEMP_ULAW =  Shiftright (viSAMPLE_ULAW,15)
        IF viTEMP_ULAW = 1 THEN
          
          viSAMPLE_ULAW = -viSAMPLE_ULAW ' MAKE POSITIVE
          
        END IF
        
        IF viSAMPLE_ULAW > 32635 THEN     ' Clip the magnitude
          viSAMPLE_ULAW = 32635
        END IF
        
        viSAMPLE_ULAW = viSAMPLE_ULAW + 132      ' Add the bias
        viVAR1 = Shiftright (viSAMPLE_ULAW,7)
        viEXPONENT = viULAW_ARRAY(viVAR1)
        viVAR1 = viEXPONENT + 3
        viMANTISSA = Shiftright (viSAMPLE_ULAW,viVAR1)
        viMANTISSA = Bitwise.BitAnd (viMANTISSA, 15)
        viVAR1 = Shiftleft (viEXPONENT,4)
        viULAW_BYTE = BITWISE.BITOR (viSIGN, viVAR1)  'vULAW_BYTE2 IS INTEGER
        viULAW_BYTE = BITWISE.BITOR (viULAW_BYTE, viMANTISSA)
        iARRAY129(i)  = viULAW_BYTE
        
      NEXT
      '''''''''''''''''''''''''''''''''''' END 16 BIT ULAW TO 8 BIT '''''''''''''''''''''''''''''''''
      
      
      
      
    CASE 14
      '''''''''''''''''''''''''''''''''''' 16 BIT ADPCM COMPRESS TO  4 BIT '''''''''''''''''''''''''''''''''
      FOR i = 0 TO ((ciPACKET_DATA_LENGTH * 4) * piCHANNELS) - 1    ' *4 FOR 16bit  TO 4bit
        viARRAY_16_TO_4(i)= stream.readbyte
        
        '"""""""""""""""""""""""""'''''''''' 'OK    ' SHOWS HEX VERSION OF WAVE FILE
        'IF viSIXTEEN > 15 THEN
        'viSIXTEEN = 0
        'EditField_RB_TERM.AppendText(CHR(13))
        'END IF
        'viSIXTEEN = viSIXTEEN + 1
        'S = HEX(viARRAY_16_TO_4(i))
        'EditField_RB_TERM.AppendText(S + " ")   
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''
      NEXT
      
      
      ' CONVERT TWO'S COMPLEMENT (-32768 TO 32767) TO (0 TO 65535)
      ' 16 BIT WAVE IS TWO'S COMPLEMENT
      c = 0
      d = 0
      FOR i = 0 TO (ciPACKET_DATA_LENGTH  * 2) - 1   ' REQUIRES 2 LOOPS FOR EACH SAVE TO BYTE ARRAY        4 BITS PER LOOP
        
        SECOND_PASS_16_TO_ADPCM:
        viLOW_BYTE = viARRAY_16_TO_4(c)   ' read    two's complement   low byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = viARRAY_16_TO_4(c)   ' read    two's complement   high byte from array
        c = c + 1
        
        viTWOS_COMP_WORD = Shiftleft (viTWOS_COMP_WORD, 8)
        
        viTWOS_COMP_WORD = viTWOS_COMP_WORD + viLOW_BYTE
        
        IF viTWOS_COMP_WORD <= 32767 THEN  ' POSITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD + 32768
        ELSE   ' NEGITIVE
          viTWOS_COMP_WORD = viTWOS_COMP_WORD - 32768
        END IF   
        
        IF piCHANNELS = 2 THEN
          IF vbFIRST_PASS = TRUE THEN
            vbFIRST_PASS = FALSE
            viTWOS_COMP_INTEGER1 = viTWOS_COMP_WORD
            GOTO SECOND_PASS_16_TO_ADPCM
            
          ELSE   ' vbFIRST_PASS = FALSE
            vbFIRST_PASS = TRUE
            viTWOS_COMP_INTEGER2 = viTWOS_COMP_WORD
            viTWOS_COMP_WORD = ((viTWOS_COMP_INTEGER2 + viTWOS_COMP_INTEGER1)  / 2)   ' AVERAGE STEREO TO MONO
            
          END IF
          
        END IF
        
        
        'ENCODE:
        viSAMPLE_EN = viTWOS_COMP_WORD - 32767    ' -32767 TO +32767
        IF viSAMPLE_EN > 32767 THEN   ' IF 32768
          viSAMPLE_EN = 32767  
        END IF
        IF viSAMPLE_EN < -32767 THEN  
          viSAMPLE_EN = -32767
        END IF
        
        
        viPRED_SAMPLE_EN = piSTATE_PREV_SAMPLE_EN
        viINDEX_EN = viSTATE_PREV_INDEX_EN
        'viSTEP_EN = LRead32 STEPSIZE_TABLE[viINDEX_EN]   
        
        'STEPSIZE_TABLE:
        'LData As DWord  7, 8, 9, 10, 11, 12, 13, 14, 16, 17,_
        '19, 21, 23, 25, 28, 31, 34, 37, 41, 45,_
        '50, 55, 60, 66, 73, 80, 88, 97, 107, 118,_
        '130, 143, 157, 173, 190, 209, 230, 253, 279, 307,_
        '337, 371, 408, 449, 494, 544, 598, 658, 724, 796,_
        '876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,_
        '2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,_
        '5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,_
        '15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
        
        Select Case viINDEX_EN
          
          ' 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,_
        Case 0
          viSTEP_EN =  7
        Case 1
          viSTEP_EN =  8
        Case 2
          viSTEP_EN =  9
        Case 3
          viSTEP_EN =  10
        Case 4
          viSTEP_EN =  11
        Case 5
          viSTEP_EN =  12
        Case 6
          viSTEP_EN =  13
        Case 7
          viSTEP_EN =  14
        Case 8
          viSTEP_EN =  16
        Case 9
          viSTEP_EN =  17
          
          '19, 21, 23, 25, 28, 31, 34, 37, 41, 45,_
        Case 10
          viSTEP_EN =  19
        Case 11
          viSTEP_EN =  21
        Case 12
          viSTEP_EN =  23
        Case 13
          viSTEP_EN =  25
        Case 14
          viSTEP_EN =  28
        Case 15
          viSTEP_EN =  31
        Case 16
          viSTEP_EN =  34
        Case 17
          viSTEP_EN =  37
        Case 18
          viSTEP_EN =  41
        Case 19
          viSTEP_EN =  45
          
          '50, 55, 60, 66, 73, 80, 88, 97, 107, 118,_
        Case 20
          viSTEP_EN =  50
        Case 21
          viSTEP_EN =  55
        Case 22
          viSTEP_EN =  60
        Case 23
          viSTEP_EN =  66
        Case 24
          viSTEP_EN =  73
        Case 25
          viSTEP_EN =  80
        Case 26
          viSTEP_EN =  88
        Case 27
          viSTEP_EN =  97
        Case 28
          viSTEP_EN =  107
        Case 29
          viSTEP_EN =  118
          
          '130, 143, 157, 173, 190, 209, 230, 253, 279, 307,_
        Case 30
          viSTEP_EN =  130
        Case 31
          viSTEP_EN =  143
        Case 32
          viSTEP_EN =  157
        Case 33
          viSTEP_EN =  173
        Case 34
          viSTEP_EN =  190
        Case 35
          viSTEP_EN =  209
        Case 36
          viSTEP_EN =  230
        Case 37
          viSTEP_EN =  253
        Case 38
          viSTEP_EN =  279
        Case 39
          viSTEP_EN =  307
          
          '337, 371, 408, 449, 494, 544, 598, 658, 724, 796,_
        Case 40
          viSTEP_EN =  337
        Case 41
          viSTEP_EN =  371
        Case 42
          viSTEP_EN =  408
        Case 43
          viSTEP_EN =  449
        Case 44
          viSTEP_EN =  494
        Case 45
          viSTEP_EN =  544
        Case 46
          viSTEP_EN =   598
        Case 47
          viSTEP_EN =  658
        Case 48
          viSTEP_EN =  724
        Case 49
          viSTEP_EN =  796
          
          '876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,_
        Case 50
          viSTEP_EN =  876
        Case 51
          viSTEP_EN =  963
        Case 52
          viSTEP_EN =  1060
        Case 53
          viSTEP_EN =  1166
        Case 54
          viSTEP_EN =  1282
        Case 55
          viSTEP_EN =  1411
        Case 56
          viSTEP_EN =  1552
        Case 57
          viSTEP_EN =  1707
        Case 58
          viSTEP_EN =  1878
        Case 59
          viSTEP_EN =  2066
          
          '2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,_
        Case 60
          viSTEP_EN =  2272
        Case 61
          viSTEP_EN =  2499
        Case 62
          viSTEP_EN =  2749
        Case 63
          viSTEP_EN =  3024
        Case 64
          viSTEP_EN =  3327
        Case 65
          viSTEP_EN =  3660
        Case 66
          viSTEP_EN =  4026
        Case 67
          viSTEP_EN =  4428
        Case 68
          viSTEP_EN =  4871
        Case 69
          viSTEP_EN =  5358
          
          '5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,_
        Case 70
          viSTEP_EN =  5894
        Case 71
          viSTEP_EN =  6484
        Case 72   
          viSTEP_EN =  7132
        Case 73
          viSTEP_EN =  7845
        Case 74
          viSTEP_EN =  8630
        Case 75
          viSTEP_EN =  9493
        Case 76
          viSTEP_EN =  10442
        Case 77
          viSTEP_EN =  11487
        Case 78
          viSTEP_EN =  12635
        Case 79
          viSTEP_EN =  13899
          
          '15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
        Case 80
          viSTEP_EN =  15289
        Case 81
          viSTEP_EN =  16818
        Case 82
          viSTEP_EN =  18500
        Case 83
          viSTEP_EN =  20350
        Case 84
          viSTEP_EN =  22385
        Case 85
          viSTEP_EN =  24623
        Case 86
          viSTEP_EN =  27086
        Case 87
          viSTEP_EN =  29794
        Case 88
          viSTEP_EN =  32767
        End Select
        
        
        viDIFF_EN = viSAMPLE_EN - viPRED_SAMPLE_EN
        
        If viDIFF_EN >= 0 Then
          viCODE_EN = 0                      ' SET SIGN BIT(CODE[3]) TO 0
        Else
          viCODE_EN = 8                      ' SET SIGN BIT(CODE[3]) TO 1  dec8 = BI 1000
          
          viDIFF_EN = - viDIFF_EN   ' make positive
          
        End If
        
        viDIFFQ_EN = Shiftright (viSTEP_EN, 3)
        
        If viDIFF_EN >= viSTEP_EN Then
          viCODE_EN = BITWISE.BITOR (viCODE_EN,  4)
          
          viDIFF_EN = viDIFF_EN - viSTEP_EN
          viDIFFQ_EN = viDIFFQ_EN + viSTEP_EN
        End If
        
        viSTEP_EN = Shiftright (viSTEP_EN, 1)
        
        If viDIFF_EN >= viSTEP_EN Then
          viCODE_EN = BITWISE.BITOR (viCODE_EN, 2)
          viDIFF_EN = viDIFF_EN - viSTEP_EN
          viDIFFQ_EN = viDIFFQ_EN + viSTEP_EN
        End If
        
        viSTEP_EN = Shiftright (viSTEP_EN, 1)
        
        If viDIFF_EN >= viSTEP_EN Then
          viCODE_EN = BITWISE.BITOR (viCODE_EN, 1)
          viDIFFQ_EN = viDIFFQ_EN + viSTEP_EN
        End If
        
        IF Bitwise.BitAnd (viCODE_EN, 8) = 8 THEN
          viPRED_SAMPLE_EN = viPRED_SAMPLE_EN - viDIFFQ_EN
        Else
          viPRED_SAMPLE_EN = viPRED_SAMPLE_EN + viDIFFQ_EN
        End If
        
        If viPRED_SAMPLE_EN > 32767 Then
          viPRED_SAMPLE_EN = 32767   ' 32767 max
        End If
        
        If viPRED_SAMPLE_EN < -32767 Then
          viPRED_SAMPLE_EN = -32767      ' -32767 min
        End If
        
        'viINDEX_EN = viINDEX_EN + LRead32 INDEX_TABLE[viCODE_EN]  '''''''''''''''
        'INDEX_TABLE:
        'LData As DWord -1, -1, -1, -1, 2, 4, 6, 8,_
        '-1, -1, -1, -1, 2, 4, 6, 8
        
        Select Case viCODE_EN
          
          '-1, -1, -1, -1, 2, 4, 6, 8,_
        Case 0
          viINDEX_EN =  viINDEX_EN -1
        Case 1
          viINDEX_EN = viINDEX_EN -1
        Case 2
          viINDEX_EN = viINDEX_EN -1
        Case 3
          viINDEX_EN =  viINDEX_EN-1
        Case 4
          viINDEX_EN = viINDEX_EN + 2
        Case 5
          viINDEX_EN = viINDEX_EN + 4
        Case 6
          viINDEX_EN = viINDEX_EN + 6
        Case 7
          viINDEX_EN = viINDEX_EN + 8
          
          '-1, -1, -1, -1, 2, 4, 6, 8
        Case 8
          viINDEX_EN = viINDEX_EN -1
        Case 9
          viINDEX_EN = viINDEX_EN -1
        Case 10
          viINDEX_EN = viINDEX_EN -1
        Case 11
          viINDEX_EN = viINDEX_EN -1
        Case 12
          viINDEX_EN = viINDEX_EN + 2
        Case 13
          viINDEX_EN = viINDEX_EN + 4
        Case 14
          viINDEX_EN = viINDEX_EN + 6
        Case 15
          viINDEX_EN = viINDEX_EN + 8
        End Select
        
        
        
        
        If viINDEX_EN < 0 Then
          viINDEX_EN = 0
        End If
        
        If viINDEX_EN > 88 Then
          viINDEX_EN = 88
        End If
        
        piSTATE_PREV_SAMPLE_EN = viPRED_SAMPLE_EN
        viSTATE_PREV_INDEX_EN = viINDEX_EN
        viCODE_EN = Bitwise.BitAnd (viCODE_EN, 15)
        
        
        ' ******ENCODED*****   viCODE_EN   ' 4 BIT COMPRESSED SAMPLE
        
        ' 2 4BIT COMPRESSED SAMPLES TO ONE BYTE VAR
        If vbHIGHBYTE_LOWBYTE_EN = FALSE Then
          vbHIGHBYTE_LOWBYTE_EN = TRUE
          vi2CODE_EN = Shiftleft (viCODE_EN, 4)
          
        Else
          vbHIGHBYTE_LOWBYTE_EN = FALSE   
          vi2CODE_EN = vi2CODE_EN + viCODE_EN 
          iARRAY129((i/2) - .5)  = vi2CODE_EN    ' NOW BYTE SIZE   ''''''''''''''''
          
        End If
        
      NEXT   
      '''''''''''''''''''''''''''''''''''' END 16 BIT  ADPCM COMPRESS TO  4 BIT '''''''''''''''''''''''''''''''''
      
    End Select
    
    
    
    
    '''''''''''''''''''''''''''''''''''' END DATA FORMAT '''''''''''''''''''''''''''''''''
    
    
    
    
    IF vbSKIP_SERIAL_OUT_SET = TRUE THEN
      GOTO SKIP_SERIAL_OUT   'SKIP FIRST LOOP
    END IF
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''' CRC '''''''''''''''''''''''''''''''''''''''''''''''''                                                
    RECALCULATE_CRC:     ' calculate 8 bit CRC
    
    viCRC = 0                                       
    For i = 0 To ciPACKET_DATA_LENGTH - 1 
      viTEMP = Bitwise.BitXor (viCRC, iARRAY129_2(i))
      viCRC = 0 + viCRC_ARRAY(viTEMP)
    Next          
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''' END CRC '''''''''''''''''''''''''''''''''''''''''''''''''   
    
    
    '''''''''''''''' TEST CRC ''''''''''''''''
    'IF viERROR_REPEAT_COUNTER < 20 THEN
    'iARRAY129_2(4) = iARRAY129_2(4) + 1
    'END IF
    
    
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''' SERIAL OUT '''''''''''''''''''''''''''''''''''''''''''''''''   
    viLOOP_TIMEOUT = 0
    
    LOOP_PACKET_SEND:
    IF Serial1.ClearToSend = TRUE THEN
      
      FOR i = 0 TO ciPACKET_DATA_LENGTH - 1
        mb.Byte( 0 ) = iARRAY129_2(i)
        Serial1.Write( mb )
        Serial1.XmitWait
      NEXT
      
    ELSE
      
      viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
      
      IF viLOOP_TIMEOUT > 200000 THEN   '> 200,000 DELAYS ABOUT 2 SEC BEFORE EXIT      ' MEMORY CHIP MAXED OUT                                               
        EditField_RB_TERM.AppendText(" PACKET SEND TIMED OUT  " + CHR (13))
        SubRB_TERM_TO_END
        BEEP
        GOTO DONE_THREAD1
      END IF
      GOTO LOOP_PACKET_SEND
    END IF
    
    
    
    viLOOP_TIMEOUT = 0
    
    LOOP_CRC_BYTE_SEND:
    IF Serial1.ClearToSend = TRUE THEN
      mb.Byte( 0 ) = viCRC  '2    
      Serial1.Write( mb )
      Serial1.XmitWait
    ELSE
      viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
      IF viLOOP_TIMEOUT > 200000 THEN   '> 200,000 DELAYS ABOUT 2 SEC BEFORE EXIT  
        EditField_RB_TERM.AppendText(" CRC BYTE SEND TIMED OUT" + CHR (13))
        SubRB_TERM_TO_END
        BEEP
        GOTO DONE_THREAD1
      ELSE
        GOTO LOOP_CRC_BYTE_SEND
      END IF
    END IF
    viLOOP_TIMEOUT = 0
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''' END SERIAL OUT ''''''''''''''''''''''''''''''''''''''''''''''''' 
    
    
    
    
    
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''' CRC ERROR CHECK BEFORE NEXT DATA LOOP ''''''''''''''''''''''''''''''
    viLOOP_TIMEOUT = 0
    
    LOOP_DSR_ERROR:  ' IF DataSetReady LOW    PIC INDICATING CRC ERROR     RESEND PACKET
    IF Serial1.DataSetReady = FALSE THEN   'DSR LOW
      viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
      IF viLOOP_TIMEOUT <50000 THEN    '< 50000 DELAYS ABOUT 1/2 SEC BEFORE DO CRC ERROR RESEND
        GOTO LOOP_DSR_ERROR   ' UNTIL = TRUE sends next packet    OR IF TIMES OUT     ERROR, RESEND PACKET
      END IF
      
      ' '''''''''' ERROR    RESEND LAST PACKET '''''''''''''
      vbERROR_SET = TRUE
      viRESEND_LINE_RETURN = viRESEND_LINE_RETURN + 1
      IF viRESEND_LINE_RETURN > 16 THEN
        viRESEND_LINE_RETURN = 0
        EditField_RB_TERM.AppendText("Re" + CHR(13))
      ELSE
        EditField_RB_TERM.AppendText("Re")
      END IF
      SubRB_TERM_TO_END
      BEEP
      
      
      viERROR_REPEAT_COUNTER = viERROR_REPEAT_COUNTER + 1
      IF  viERROR_REPEAT_COUNTER > 24 THEN
        EditField_RB_TERM.AppendText(Chr(13) + " IRRECOVERABLE ERROR:  EXITING " + Chr(13))
        SubRB_TERM_TO_END
        
        GOTO DONE_THREAD1
      END IF
      
      GOTO RECALCULATE_CRC
    ELSE
      
      IF vbERROR_SET = TRUE THEN
        vbERROR_SET = FALSE
        EditField_RB_TERM.AppendText(CHR(13) + " OK " + CHR(13))
        viRESEND_LINE_RETURN = 0
      END IF
      
    END IF
    '""""""""""""""""""""""""""""""""""""""""""" NO ERROR  SEND NEXT PACKET """""""""""""""""""""""""""""""""""""""""""
    
    
    SKIP_SERIAL_OUT:
    
    vbSKIP_SERIAL_OUT_SET = FALSE
    
    
    FOR i = 0 TO ciPACKET_DATA_LENGTH - 1
      iARRAY129_2(i) =iARRAY129(i)    'EMTY TO  SERIAL BUFFEROUT
    NEXT
    
    
    piPACKETS_DONE = piPACKETS_DONE + 1
    
    
    '''''''''''''''''''''''''''''  UPDATE PROGRESS BARS '''''''''''''''''''''''''''''''
    
    viPROGRESSBAR_LOOP = viPROGRESSBAR_LOOP + 1
    IF viPROGRESSBAR_LOOP = 500 THEN
      viPROGRESSBAR_LOOP = 0
      
      subPROG_BAR_UPDATE_THREAD1
      
    END IF
    
    ''''''''''''''''''''''''''''''''
    
    viREC_LED = viREC_LED + 1
    IF viREC_LED = 50 THEN
      RoundRectangle_REC_LED.fillColor= RGB(0,255,0) //Red,GREEN,BLUE
      RoundRectangle_REC_LED.Visible = TRUE
      Thread1.Sleep (1) ' milliseconds  ' SMOOTHS UPDATE
    END IF
    IF viREC_LED = 100 THEN
      viREC_LED = 0
      RoundRectangle_REC_LED.fillColor= RGB(233,231,216)
      Thread1.Sleep (1) ' milliseconds  ' SMOOTHS UPDATE
    END IF
      
    
  loop until stream.eof  ']]]]]]]]]]]]]]]]]]]]]]]]]]]
  
  stream.close
  
  '''''''''''''''''''''''''''''''''''''''''''''''''' END DATA SEND EXCEPT LASTPACKET ''''''''''''''''''''''''''''''''''''''''''
  
  
  
  
  
  
  ''''''''''''''''''''''''''' LASTPACKET OVERWRITE ALL TRAILING 0's WITH FF ''''''''''''''''''''''''''''''
  'ALL NON DATA (0's) BEYOND EOF OVERWRITE WITH 1'S (FF OR 255)
  'M25P32 MEMORY CAN BE OVERWRITTEN WITH 1'S (FF's)  WITH NO DATA CHANGE...
  'AND BACKTRACK TO FIRST NON FF's AS EOF.  MAKES POSSIBLE A 1 BYTE FILE.
  
  
  FOR i = ciPACKET_DATA_LENGTH - 1 TO 0 STEP - 1
    IF iARRAY129_2(i) = 0 THEN
      iARRAY129_2(i) = 255
    ELSE
      GOTO DONE_0s_TO_255s
    END IF
  NEXT 
  
  DONE_0s_TO_255s:
  
  
  viERROR_REPEAT_COUNTER = 0
  RECALCULATE_CRC_LASTPACKET:
  
   viCRC = 0
  For i = 0 To ciPACKET_DATA_LENGTH - 1
    viTEMP = Bitwise.BitXor (viCRC, iARRAY129_2(i))
    viCRC = 0 + viCRC_ARRAY(viTEMP)
  Next
  
  
  
  '''''''''''''''' TEST CRC LAST PACKET ''''''''''''''''
  'IF viERROR_REPEAT_COUNTER < 50 THEN
  'iARRAY129_2(4) = iARRAY129_2(4) + 1
  'END IF
  
  viLOOP_TIMEOUT = 0
  
  LOOP_LASTPACKET_SEND:
  IF Serial1.ClearToSend = TRUE THEN
    
    FOR i = 0 TO ciPACKET_DATA_LENGTH - 1
      mb.Byte( 0 ) = iARRAY129_2(i)
      Serial1.Write( mb )
      Serial1.XmitWait
    NEXT
    
  ELSE
    
    viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
    
    IF viLOOP_TIMEOUT > 200000 THEN   '> 200,000 DELAYS ABOUT 2 SEC BEFORE EXIT      ' MEMORY CHIP MAXED OUT
      EditField_RB_TERM.AppendText(" LASTPACKET SEND TIMED OUT  " + CHR (13))
      SubRB_TERM_TO_END
      BEEP
      GOTO DONE_THREAD1
    END IF
    GOTO LOOP_LASTPACKET_SEND
  END IF
  
  
  
  
  viLOOP_TIMEOUT = 0
  
  LOOP_CRC_BYTE_LASTPACKET:
  IF Serial1.ClearToSend = TRUE THEN
    mb.Byte( 0 ) = viCRC
    Serial1.Write( mb )
    Serial1.XmitWait
  ELSE
    viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
    IF viLOOP_TIMEOUT > 200000 THEN   '> 200,000 DELAYS ABOUT 2 SEC BEFORE EXIT
      EditField_RB_TERM.AppendText(" LASTPACKET CRC BYTE SEND TIMED OUT" + CHR (13))
      SubRB_TERM_TO_END
      BEEP
      GOTO DONE_THREAD1
    ELSE
      GOTO LOOP_CRC_BYTE_LASTPACKET
    END IF
  END IF
  viLOOP_TIMEOUT = 0
  
  
  
  
  
  '''''''''''''''''''''''''''''''''''''''''''''''''''''' CRC ERROR CHECK BEFORE TERMINATE ''''''''''''''''''''''''''''''
  viLOOP_TIMEOUT = 0
  
  LOOP_DSR_ERROR_LASTPACKET:  ' IF DataSetReady LOW    PIC INDICATING CRC ERROR     RESEND PACKET
  IF Serial1.DataSetReady = FALSE THEN   'DSR LOW
    viLOOP_TIMEOUT = viLOOP_TIMEOUT + 1
    IF viLOOP_TIMEOUT <50000 THEN    '< 50000 DELAYS ABOUT 1/2 SEC BEFORE DO CRC ERROR RESEND
      GOTO LOOP_DSR_ERROR_LASTPACKET   ' UNTIL = TRUE sends next packet    OR IF TIMES OUT     ERROR, RESEND PACKET
    END IF
    
    '''''''''' ERROR    RESEND LAST PACKET '''''''''''''
    vbERROR_SET = TRUE
    viRESEND_LINE_RETURN = viRESEND_LINE_RETURN + 1
    IF viRESEND_LINE_RETURN > 11 THEN
      viRESEND_LINE_RETURN = 0
      EditField_RB_TERM.AppendText("LRe" + CHR(13))
    ELSE
      EditField_RB_TERM.AppendText("LRe")
    END IF
    SubRB_TERM_TO_END
    BEEP
    
    
    viERROR_REPEAT_COUNTER = viERROR_REPEAT_COUNTER + 1
    IF  viERROR_REPEAT_COUNTER > 24 THEN 
      EditField_RB_TERM.AppendText(Chr(13) + "LASTPACKET IRRECOVERABLE ERROR:  EXITING " + Chr(13))
      SubRB_TERM_TO_END
      
      GOTO DONE_THREAD1
    END IF
    
    GOTO RECALCULATE_CRC_LASTPACKET
  ELSE
    
    IF vbERROR_SET = TRUE THEN
      vbERROR_SET = FALSE
      EditField_RB_TERM.AppendText( CHR(13) +" LASTPACKET OK ")
      viRESEND_LINE_RETURN = 0
    END IF
    
  END IF
  '""""""""""""""""""""""""""""""" NO ERROR  TERMINATE DATA SEND """"""""""""""""""""""""""""""""
  
  
  
  
  
  
  subPROG_BAR_UPDATE_THREAD1
  
  BEEP
  
  DONE_THREAD1:
  RoundRectangle_REC_LED.Visible = FALSE
  pbTHREAD1RUN_SET = FALSE
  
  
  
  
  
  
  
  
  
  
  
  